﻿using System;
using System.Text;
using System.Drawing;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public static partial class glDRIVE
{
    /*
    函数 gl.hhqr
    求上H矩阵特征值的QR方法
    参数 a: a[n][n]上H矩阵
    参数 n: 
    参数 u: u[n]返回n个特征值的实部
    参数 v: v[n]返回n个特征值的虚部
    参数 eps: 精度要求
    参数 inter: 最大迭代次数,100
    返回值 若在计算某个特征值时迭代超过100次，则返回0标志值；否则返回非0标志值。
    */

    public static string drive_hhqr()
    {
        int i, j;
        double eps = 0.000001;
        double[] u = new double[5];
        double[] v = new double[5];
        double[,] a = new double[5, 5]{
            {1.0,6.0,-3.0,-1.0,7.0},
            {8.0,-15.0,18.0,5.0,4.0},
            {-2.0,11.0,9.0,15.0,20.0},
            {-13.0,2.0,21.0,30.0,-6.0},
            {17.0,22.0,-5.0,3.0,6.0}
        };

        string rs = "";
        rs += gl.html_table("原矩阵 A", a);

        // 约化一般实矩阵为上H阵
        gl.hhbg(a, 5);

        rs += gl.html_table("上H矩阵 A", a);

        // 求上H矩阵特征值
        i = gl.hhqr(a, 5, u, v, eps, 100);
        if (i == 0) return "error: 0";

        rs += gl.html_table("Mat U", u);
        rs += gl.html_table("矩阵A的特征值 V", v);

        return rs;
    }
}